﻿#region Using

#endregion

namespace Vk.Methods.Wall
{
    public class PostSource
    {
        /// <summary>
        /// Тип действия, из-за которого была создана запись
        /// </summary>
        public enum VkDataEnum
        {
            /// <summary>
            /// Изменение статуса под именем пользователя
            /// </summary>
            ProfileActivity,

            /// <summary>
            /// Изменение профильной фотографии пользователя
            /// </summary>
            ProfilePhoto,
        }

        /// <summary>
        /// Тип виджета, через который была создана запись
        /// </summary>
        public enum WidgetDataEnum
        {
            /// <summary>
            /// Виджет комментариев
            /// </summary>
            Comments,

            /// <summary>
            /// Виджет "Мне нравится"
            /// </summary>
            Like,

            /// <summary>
            /// Виджет опросов
            /// </summary>
            Poll,
        }

        /// <summary>
        /// Поле data является опциональным и содержит следующие данные в зависимости от значения поля type:
        /// - Vk => VkDataEnum
        /// - Widget => WidgetDataEnum
        /// </summary>
        /// <see cref="VkDataEnum"/>
        /// <see cref="WidgetDataEnum"/>
        public object Data { get; set; }

        /// <summary>
        /// Информация о том, каким образом (через интерфейс сайта, виджет и т.п.) была создана запись на стене. 
        /// </summary>
        public PostSourceType? Type { get; set; }

        public PostSource(ApiNode node)
        {
            Type = node.Enum<PostSourceType>("type");
            Platform = node.Enum<PostSourcePlatform>("platform");

            var data = node.SelectNode("data");
            if (Type == PostSourceType.Vk && data != null)
            {
                Data = node.Enum<VkDataEnum>("data");
            }
            if (Type == PostSourceType.Widget && data != null)
            {
                Data = node.Enum<WidgetDataEnum>("data");
            }

            Url = node.String("url");
        }

        /// <summary>
        /// Название платформы, если оно доступно
        /// </summary>
        public PostSourcePlatform? Platform { get; set; }

        /// <summary>
        /// Поле url может содержать внешнюю ссылку на ресурс, с которого была опубликована запись.
        /// </summary>
        public string Url { get; set; }
    }

    /// <summary>
    /// Название платформы
    /// </summary>
    public enum PostSourcePlatform
    {
        Android,
        Iphone,
        Wphone
    }

    /// <summary>
    /// Информация о том, каким образом (через интерфейс сайта, виджет и т.п.) была создана запись на стене. 
    /// </summary>
    public enum PostSourceType
    {
        /// <summary>
        ///  Запись создана через основной интерфейс сайта
        /// </summary>
        Vk,

        /// <summary>
        /// Запись создана через виджет на стороннем сайте
        /// </summary>
        Widget,

        /// <summary>
        /// Запись создана приложением через API;
        /// </summary>
        Api,

        /// <summary>
        /// Запись создана посредством импорта RSS-ленты со стороннего сайта
        /// </summary>
        Rss,

        /// <summary>
        /// Запись создана посредством отправки SMS-сообщения на специальный номер
        /// </summary>
        Sms
    }
}